
#include "LCD1602.h"
#include "intrins.h"

void lcd1602_write_cmd(u8 cmd)
{
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=cmd;
	delay_ms(1);
	LCD1602_E=1;
	_nop_();
	LCD1602_E=0;
	LCD1602_RS=1;
	LCD1602_RW=1;			
}

void lcd1602_write_data(u8 dat)
{
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=dat;
	delay_ms(1);
	LCD1602_E=1;
	_nop_();
	LCD1602_E=0;
	LCD1602_RS=0;
	LCD1602_RW=0;
}

void lcd1602_init(void)
{
	lcd1602_write_cmd(0x06);
	lcd1602_write_cmd(0x0c);
	lcd1602_write_cmd(0x38);
	lcd1602_write_cmd(0x01);	
}

void lcd1602_clear(void)
{
	lcd1602_write_cmd(0x01);
}

void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
	u8 i=0;
	if(y>1||x>15)
	{
		return;
	}
	if(y==0)
	{
	 	while(*str!='\0')
		{
			if(i<16-x)
			{
				lcd1602_write_cmd(0x80+i+x);
			}
			else
			{
				lcd1602_write_cmd(0x80+0x40+i+x-16);	
			}
			lcd1602_write_data(*str);
			str++;
			i++;
		}
	}
	if(y==1)
	{
		while(*str!='\0')
		{
			if(i<16-x)
			{
				lcd1602_write_cmd(0x80+0x40+i+x);
			}
			else
			{
				lcd1602_write_cmd(0x80+i+x-16);	
			}
			lcd1602_write_data(*str);
			str++;
			i++;
		}
	}
}

